package com.dfbz.service;

import com.dfbz.model.User;
import com.dfbz.model.UserFocus;

import java.util.List;
import java.util.Map;

public interface UserServices {

    /**
     * 通过用户名找到用户对象
     * @param username 用户名
     * @return User对象
     */
    User findByName(String username);

    /**
     * 通过邮箱找到用户对象
     * @param email 用户名
     * @return User对象
     */
    User findByEmail(String email);

    /**
     * 通过邮箱或者用户名找到用户对象
     * @param email    邮箱
     * @param username 用户名
     * @return true:表示能注册; false:表示不能注册
     */
    boolean checkByEmailOrName(String email, String username);

    /**
     * 添加新用户
     * @param user 用户对象
     * @return 添加成功返回true, 失败返回false
     */
    boolean addUser(User user);

    /**
     * 发送验证码邮件到用户邮箱
     * @param email 用户邮箱
     * @return 返回一个验证码
     */
    String sendEmailCode(String email);

    /**
     * 重制密码
     * @param email    用户邮箱
     * @param password 新密码
     * @return true:重制成功；false:重制失败
     */
    boolean resetPassword(String email, String password);

    /**
     * 查找用户基本信息
     * @param username    用户名
     * @return Map对象，里面有 realName 和 deptName
     */
    Map<String, Object> findUserBaseInfo(String username);

    /**
     * 查找用户个人中心数据信息
     * @param userId    用户ID
     * @return Map对象，里面个人相关的所有信息
     */
    Map<String, Object> getUserInfo(String userId);

    /**
     * 分页查询用户列表信息
     * @param userId    当前登录用户ID
     * @param currentPage    当前页面
     * @param name    模糊查询用户姓名
     * @return Map对象
     */
    List<Map<String, Object>> getUserList(String userId, int currentPage, String name);

    /**
     * 分页查询用户总数信息
     * @param name    模糊查询用户姓名
     * @return 总用户数
     */
    long getUserCount(String name);

    /**
     * 更新用户登录时间
     * @param userId    用户ID
     */
    void updateLoginTime(Integer userId);

    /**
     * 关注用户
     * @param userId    当前登录的用户ID
     * @param ufId    关注对方的用户ID
     * @return true表示关注成功 false关注失败
     */
    boolean followUser(String userId, String ufId);

    /**
     * 根据用户以及关注对应用户ID查找信息
     * @param userId    当前登录的用户ID
     * @param ufId    关注对方的用户ID
     * @return 关注对象信息
     */
    UserFocus getFollowUser(String userId, String ufId);

    /**
     * 根据关注表主键ID取消关注查找信息
     * @param id    主键ID
     * @return true 取关成功; false 取关失败
     */
    boolean unFollowUser(Integer id);
}
